package com.cskaoyan.mapper;

import com.cskaoyan.bean.Student;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 创建日期: 2022/11/22 17:45
 *
 * @author ciggar
 */
public interface StudentMapper {

    // where
    Student selectStudentById(@Param("id") Integer id);


    // if
    // 传入一个id，假如id> 5000, 那么查询 用户id大于5000的用户 select * from student where id > 5000
    // 假如id<= 5000，那么查询 id 小于等于5000的用户  select * from student where id <= 5000
    List<Student> selectStudentListByIdUseIf(@Param("id") Integer id);


    // where 和 if 标签配合使用的 综合案例
    // 传入一个Student对象
    // 假如student对象中id有值，那么根据id查询; 假如Student对象中name有值，那么根据name查询
    // 假如student中id和name有值，那么根据id和name作为并列条件来查
    // 假如Student对象中成员变量都有值，那么根据这些值作为并列条件来查
    // 假如Student对象中成员变量都没有值，那么就查所有的

    List<Student> selectStudentListByStudentBySelective(@Param("student") Student student);


    // choose when otherwise

    // 传一个id
    // 假如传入的id比2000大，那么查询id>2000的用户
    // 否则，查询id<= 2000的用户
    List<Student> selectStudentListUseChooseWhenOtherwise(@Param("id") Integer id);


    // trim

    // 传入一个对象，根据id去修改学生内容
    // 假如 student 对象中name 不为空，那么就去修改name;如果为空就不修改
    // 假如 student 对象中 clazz不为空，那么就去修改class; 如果为空就不修改
    int updateStudentByIdBySelective(@Param("student") Student student);


    // set
    int updateStudentByIdBySelectiveUseSet(@Param("student") Student student);


    // foreach 批量插入
    int insertStudentList(@Param("studentList") List<Student> studentList);

    int insertStudentArray(@Param("studentArray") Student[] studentArray);


    // in 查询
    // select * from student where id in (1001,1002,1003,1004 ...)
    List<Student> selectStudentListByIdList(@Param("idList") List<Integer> idList);

    List<Student> selectStudentListByIdArray(Integer[] idArray);

}
